home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dev / sun4.md / atcreg.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  4KB  |  119 lines

  1. /*
  2.  * atcreg.h - definitions internal to the driver
  3.  *
  4.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/dev/sun4.md/atcreg.h,v 9.1 92/08/24 15:48:15 alc Exp $
  5.  */
  6.  
  7. #ifndef _ATCREG
  8. #define _ATCREG
  9.  
  10. #include "iopb.h"
  11.  
  12. #define    MAX_SG    41    /* allows for 164k transfers */
  13.  
  14. #define    NBPP    PAGESIZE
  15.  
  16. #define    MAX_BCOUNT    (MAX_SG * NBPP)
  17.  
  18. #ifndef KERNEL
  19. #define KERNEL
  20. #endif KERNEL
  21. #if defined(KERNEL) || defined(INKERNEL)
  22. /*
  23.  * IOPB header used internally by the driver
  24.  *
  25.  * Each IOPB comes with a buffer header. This is only used by special
  26.  * commands as a convenience to avoid allocating buffers from the global
  27.  * pool.
  28.  */
  29. struct iopbhdr {
  30. /*    struct    buf    spbuf;    */    /* for special commands */
  31.     struct    iopb    iopb;        /* must be first */
  32.     struct    sg    sg_list[MAX_SG];/* scatter/gather list */
  33.     struct    buf    *bp;        /* buffer this request is for */
  34.     int             ticks;          /* used for timeouts */
  35.     struct    iopbhdr    *next_free;    /* links free IOPBs */
  36.     u_long    index;            /* index of this iopb */
  37.     double  pad;
  38.     struct pass_thru_block pass_thru;         /* contains info for pass-thru cmd */
  39. };
  40.  
  41. /*
  42.  * Define the FIFO mapping in VME A16 space.
  43.  */
  44.  volatile struct FIFO    {
  45.     u_short    read_fifo;                /* 0x0   */
  46.     u_short    fill1;                    /* 0x2   */
  47.     u_short    write_fifo;                /* 0x4   */
  48. } FIFO;
  49.  
  50.  
  51. typedef struct FIFO ATCRegs;     /*note:  not in latest version from ATC */
  52. #endif
  53.  
  54.  
  55. /*
  56.  * Structure of driver statistics
  57.  */
  58. struct dstats {
  59.     int    npq;        /* number of entries in the process queue */
  60.     int    ndq;        /* number of entries in the delayed queue */
  61.     int    max_pq;        /* maximum size of the process queue so far */
  62.     int    n_started;    /* # of IOPBs started so far */
  63.     int    n_completed;    /* # of IOPBs completed */
  64.     int     n_ints;         /* # of interrupts taken */
  65. };
  66.  
  67. /*
  68.  * ioctl functions
  69.  *
  70.  * Ioctl's come in two kinds. Local ioctl's affect the operation of the
  71.  * driver. Command ioctl's translate directly into an IOPB that is created
  72.  * and sent to the array, usually to transfer control information to or
  73.  * from it. The application fills in a command buffer and passes its
  74.  * address via the ioctl system call. Only certain combinations of command
  75.  * and option bytes are supported by the driver.
  76.  */
  77. struct cmdbuf {
  78.     char    command;
  79.     char    option;
  80.     char    flags;
  81.     char    *buffer;
  82.     u_short    id;
  83.     u_long    block;
  84.  
  85.     u_long    status;        /* status returned here on error */
  86. };
  87.  
  88. #define    DBUFSZ    512    /* size of the per-controller diagnostics buffer */
  89.  
  90.  
  91. #define    ATC_LOCAL_SET    0x10000        /* ioctl's the affect the driver only */
  92. #define    ATC_CMD_SET    0x20000        /* commands passed through the driver */
  93. #define    ATC_DIAG_SET    0x40000        /* ioctl's for diagnostics */
  94.  
  95. #define    ATC_DEBUG    ATC_LOCAL_SET|0    /* enable/disable debug code */
  96. #define    ATC_SINGLE    ATC_LOCAL_SET|1    /* enable/disable multiple requests */
  97. #define    ATC_TIMEOUTS    ATC_LOCAL_SET|2    /* enable/disable timeouts */
  98. #define    ATC_STIMEOUTS    ATC_LOCAL_SET|3    /* show timeouts */
  99. #define    ATC_SSTATS    ATC_LOCAL_SET|4    /* show stats */
  100. #define    ATC_CSTATS    ATC_LOCAL_SET|5    /* clear stats */
  101. #define    ATC_RESET    ATC_LOCAL_SET|6    /* re-init the table descriptor */
  102. #define ATC_SWITCHOVER  ATC_LOCAL_SET|7 /* force controller switchover */
  103.  
  104. #define    ATC_DIRECT    ATC_CMD_SET|0    /* send a command to the array */
  105.  
  106. #define    ATC_WFIFO    ATC_DIAG_SET|0    /* write to the FIFO */
  107. #define    ATC_RFIFO    ATC_DIAG_SET|1    /* read from the FIFO */
  108. #define    ATC_BRFIFO    ATC_DIAG_SET|2    /* blocking read from the FIFO */
  109. #define    ATC_WBUFFER    ATC_DIAG_SET|3    /* write to the kernel diag. buffer */
  110. #define    ATC_RBUFFER    ATC_DIAG_SET|4    /* read from the kernel diag. buffer */
  111. #define    ATC_BUFADDR    ATC_DIAG_SET|5    /* return the diag. buffer's address */
  112. #define    ATC_ILEVEL    ATC_DIAG_SET|6    /* return the interrupt level being used */
  113. #define    ATC_IVECTOR    ATC_DIAG_SET|7    /* return the interrupt vector being used */
  114.  
  115. extern ClientData DevATCInit();
  116. extern Boolean DevATCIntr();
  117.  
  118. #endif /* _ATCREG */
  119.